package com.copd.service;

import java.util.Map;

/**
 * 数据备份服务接口
 * 用于在CRUD操作时自动备份数据
 */
public interface DataBackupService {
    
    /**
     * 备份患者基本信息
     * @param patientId 患者ID
     * @param doctorId 医生ID
     * @param operationType 操作类型（新增、修改、删除、查询）
     * @return 是否备份成功
     */
    boolean backupPatientInfo(Integer patientId, Integer doctorId, String operationType);
    
    /**
     * 备份诊断记录
     * @param recordId 诊断记录ID
     * @param patientId 患者ID
     * @param doctorId 医生ID
     * @param operationType 操作类型
     * @return 是否备份成功
     */
    boolean backupDiagnosisRecord(Integer recordId, Integer patientId, Integer doctorId, String operationType);
    
    /**
     * 备份检查项目
     * @param examId 检查记录ID
     * @param patientId 患者ID
     * @param doctorId 医生ID
     * @param operationType 操作类型
     * @return 是否备份成功
     */
    boolean backupExaminationItem(Integer examId, Integer patientId, Integer doctorId, String operationType);
    
    /**
     * 备份治疗方案
     * @param planId 治疗方案ID
     * @param patientId 患者ID
     * @param doctorId 医生ID
     * @param operationType 操作类型
     * @return 是否备份成功
     */
    boolean backupTreatmentPlan(Integer planId, Integer patientId, Integer doctorId, String operationType);
    
    /**
     * 备份出院建议
     * @param dischargeId 出院记录ID
     * @param patientId 患者ID
     * @param doctorId 医生ID
     * @param operationType 操作类型
     * @return 是否备份成功
     */
    boolean backupDischargeRecord(Integer dischargeId, Integer patientId, Integer doctorId, String operationType);
    
    /**
     * 按照表名和记录ID进行备份
     * @param tableName 表名
     * @param recordId 记录ID
     * @param patientId 患者ID
     * @param doctorId 医生ID
     * @param operationType 操作类型
     * @return 是否备份成功
     */
    boolean backupByTableAndId(String tableName, Integer recordId, Integer patientId, Integer doctorId, String operationType);
    
    /**
     * 查询备份数据
     * @param request 查询条件
     * @param doctorId 医生ID
     * @return 备份数据列表和总数
     */
    Map<String, Object> queryBackupData(com.copd.dto.BackupDataQueryRequest request, Integer doctorId);

    /**
     * 获取备份表信息
     * @param doctorId 医生ID
     * @return 备份表信息（包含表名、描述等）
     */
    Map<String, Object> getBackupTablesInfo(Integer doctorId);
    
    /**
     * 获取患者信息
     * @param patientId 患者ID
     * @return 患者基本信息
     */
    Map<String, Object> getPatientInfo(Integer patientId);
    
    /**
     * 获取医生信息
     * @param doctorId 医生ID
     * @return 医生基本信息
     */
    Map<String, Object> getDoctorInfo(Integer doctorId);
    
    /**
     * 获取备份操作日志
     * @param doctorId 医生ID (可选)
     * @param patientId 患者ID (可选)
     * @param tableName 表名 (可选)
     * @param operationType 操作类型 (可选，如 "新增", "修改", "删除", "查询")
     * @param startTime 开始时间 (可选)
     * @param endTime 结束时间 (可选)
     * @param page 页码
     * @param size 每页大小
     * @return 操作日志记录及统计信息
     */
    Map<String, Object> getBackupOperationLogs(Integer doctorId, Integer patientId, String tableName, 
                                             String operationType, String startTime, String endTime, 
                                             Integer page, Integer size);
} 